package com.hspedu.poly_.polyparameter_;

/**
 * @author 谷其昊
 * @version 1.0
 * @date 2022/1/23
 * @time 17:24
 */
public class PolyParameter {
    public static void main(String[] args) {
        PolyParameter polyParameter = new PolyParameter();
        CommonEmp tom = new CommonEmp("tom",2500);
        Manager milan = new Manager("milan", 5000, 20000);
        System.out.println(polyParameter.showEmpAnnual(tom));
        System.out.println(polyParameter.showEmpAnnual(milan));
        System.out.println();
        polyParameter.testWork(tom);
        polyParameter.testWork(milan);

    }

    /**
     * 调用子类中特有方法时才用向下转型
     * 重写的方法不用强转，会根据动态绑定机制调用
     * @param e
     * @return
     */
    public double showEmpAnnual(Employee e){
//        if (e instanceof CommonEmp){
//           return ((CommonEmp) e).getAnnual();
//        }else if (e instanceof Manager){
//            return ((Manager) e).getAnnual();
//        }else {
//            return -1;
//        }

        return e.getAnnual();
    }

    /**
     * 这里是调用子类的特有方法，需要向下转型
     * @param e
     */
    public void testWork(Employee e){
        if (e instanceof CommonEmp){
             ((CommonEmp) e).work();
        }else if (e instanceof Manager){
             ((Manager) e).manage();
        }
    }
}
